{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3. Data Modeling"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "After feature engineering and data analysis, the next step is to model the data to understand if the ECG waveform together with basic demographic information could be used as a biometric identification by training a clasification model. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Importing packages\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import scipy as sp\n",
    "import scipy.signal\n",
    "import glob\n",
    "import os\n",
    "import seaborn as sns\n",
    "%matplotlib inline\n",
    "\n",
    "import ECG_Biometric_functions as functions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.1 DataFrame preparation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The gender column is converted using one-hot encoding and all NaN values are dropped before training the proposed model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_ecg = pd.read_pickle(\"df_ecg\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>female</th>\n",
       "      <th>male</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2854</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2855</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2856</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2857</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2858</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2859 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      female  male\n",
       "0          0     1\n",
       "1          0     1\n",
       "2          0     1\n",
       "3          0     1\n",
       "4          0     1\n",
       "...      ...   ...\n",
       "2854       1     0\n",
       "2855       1     0\n",
       "2856       1     0\n",
       "2857       1     0\n",
       "2858       1     0\n",
       "\n",
       "[2859 rows x 2 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_ecg_gender = pd.get_dummies(df_ecg.Gender)\n",
    "df_ecg_gender"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Gender    0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cat_df = df_ecg.select_dtypes(include=[\"object\"])\n",
    "cat_df.shape[1]\n",
    "cat_df.isnull().sum().sort_values()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Subject_ID</th>\n",
       "      <th>Age</th>\n",
       "      <th>RR</th>\n",
       "      <th>ECG_mean</th>\n",
       "      <th>ECG_std</th>\n",
       "      <th>ECG_var</th>\n",
       "      <th>ECG_median</th>\n",
       "      <th>female</th>\n",
       "      <th>male</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>25</td>\n",
       "      <td>1.564</td>\n",
       "      <td>-0.005709</td>\n",
       "      <td>0.143250</td>\n",
       "      <td>0.020521</td>\n",
       "      <td>-0.044025</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>25</td>\n",
       "      <td>1.864</td>\n",
       "      <td>0.009104</td>\n",
       "      <td>0.148422</td>\n",
       "      <td>0.022029</td>\n",
       "      <td>-0.037736</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>25</td>\n",
       "      <td>1.852</td>\n",
       "      <td>-0.001956</td>\n",
       "      <td>0.150660</td>\n",
       "      <td>0.022698</td>\n",
       "      <td>-0.044025</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>25</td>\n",
       "      <td>1.756</td>\n",
       "      <td>-0.005924</td>\n",
       "      <td>0.156182</td>\n",
       "      <td>0.024393</td>\n",
       "      <td>-0.050315</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>25</td>\n",
       "      <td>2.496</td>\n",
       "      <td>0.021659</td>\n",
       "      <td>0.150437</td>\n",
       "      <td>0.022631</td>\n",
       "      <td>-0.031447</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2854</th>\n",
       "      <td>89</td>\n",
       "      <td>40</td>\n",
       "      <td>2.790</td>\n",
       "      <td>0.003459</td>\n",
       "      <td>0.128510</td>\n",
       "      <td>0.016515</td>\n",
       "      <td>-0.039772</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2855</th>\n",
       "      <td>89</td>\n",
       "      <td>40</td>\n",
       "      <td>1.712</td>\n",
       "      <td>0.003983</td>\n",
       "      <td>0.133123</td>\n",
       "      <td>0.017722</td>\n",
       "      <td>-0.039772</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2856</th>\n",
       "      <td>89</td>\n",
       "      <td>40</td>\n",
       "      <td>1.662</td>\n",
       "      <td>-0.000444</td>\n",
       "      <td>0.130906</td>\n",
       "      <td>0.017136</td>\n",
       "      <td>-0.045455</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2857</th>\n",
       "      <td>90</td>\n",
       "      <td>21</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2858</th>\n",
       "      <td>90</td>\n",
       "      <td>21</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2859 rows × 9 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      Subject_ID  Age     RR  ECG_mean   ECG_std   ECG_var  ECG_median  \\\n",
       "0              1   25  1.564 -0.005709  0.143250  0.020521   -0.044025   \n",
       "1              1   25  1.864  0.009104  0.148422  0.022029   -0.037736   \n",
       "2              1   25  1.852 -0.001956  0.150660  0.022698   -0.044025   \n",
       "3              1   25  1.756 -0.005924  0.156182  0.024393   -0.050315   \n",
       "4              1   25  2.496  0.021659  0.150437  0.022631   -0.031447   \n",
       "...          ...  ...    ...       ...       ...       ...         ...   \n",
       "2854          89   40  2.790  0.003459  0.128510  0.016515   -0.039772   \n",
       "2855          89   40  1.712  0.003983  0.133123  0.017722   -0.039772   \n",
       "2856          89   40  1.662 -0.000444  0.130906  0.017136   -0.045455   \n",
       "2857          90   21    NaN       NaN       NaN       NaN         NaN   \n",
       "2858          90   21    NaN       NaN       NaN       NaN         NaN   \n",
       "\n",
       "      female  male  \n",
       "0          0     1  \n",
       "1          0     1  \n",
       "2          0     1  \n",
       "3          0     1  \n",
       "4          0     1  \n",
       "...      ...   ...  \n",
       "2854       1     0  \n",
       "2855       1     0  \n",
       "2856       1     0  \n",
       "2857       1     0  \n",
       "2858       1     0  \n",
       "\n",
       "[2859 rows x 9 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_ecg = df_ecg.join(df_ecg_gender, how='outer').drop([\"Gender\"], axis=1)\n",
    "df_ecg"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Subject_ID</th>\n",
       "      <th>Age</th>\n",
       "      <th>RR</th>\n",
       "      <th>ECG_mean</th>\n",
       "      <th>ECG_std</th>\n",
       "      <th>ECG_var</th>\n",
       "      <th>ECG_median</th>\n",
       "      <th>female</th>\n",
       "      <th>male</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>25</td>\n",
       "      <td>1.564</td>\n",
       "      <td>-0.005709</td>\n",
       "      <td>0.143250</td>\n",
       "      <td>0.020521</td>\n",
       "      <td>-0.044025</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>25</td>\n",
       "      <td>1.864</td>\n",
       "      <td>0.009104</td>\n",
       "      <td>0.148422</td>\n",
       "      <td>0.022029</td>\n",
       "      <td>-0.037736</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>25</td>\n",
       "      <td>1.852</td>\n",
       "      <td>-0.001956</td>\n",
       "      <td>0.150660</td>\n",
       "      <td>0.022698</td>\n",
       "      <td>-0.044025</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>25</td>\n",
       "      <td>1.756</td>\n",
       "      <td>-0.005924</td>\n",
       "      <td>0.156182</td>\n",
       "      <td>0.024393</td>\n",
       "      <td>-0.050315</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>25</td>\n",
       "      <td>2.496</td>\n",
       "      <td>0.021659</td>\n",
       "      <td>0.150437</td>\n",
       "      <td>0.022631</td>\n",
       "      <td>-0.031447</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2852</th>\n",
       "      <td>89</td>\n",
       "      <td>40</td>\n",
       "      <td>1.848</td>\n",
       "      <td>0.007995</td>\n",
       "      <td>0.136229</td>\n",
       "      <td>0.018558</td>\n",
       "      <td>-0.039757</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2853</th>\n",
       "      <td>89</td>\n",
       "      <td>40</td>\n",
       "      <td>2.784</td>\n",
       "      <td>0.007042</td>\n",
       "      <td>0.135180</td>\n",
       "      <td>0.018274</td>\n",
       "      <td>-0.034091</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2854</th>\n",
       "      <td>89</td>\n",
       "      <td>40</td>\n",
       "      <td>2.790</td>\n",
       "      <td>0.003459</td>\n",
       "      <td>0.128510</td>\n",
       "      <td>0.016515</td>\n",
       "      <td>-0.039772</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2855</th>\n",
       "      <td>89</td>\n",
       "      <td>40</td>\n",
       "      <td>1.712</td>\n",
       "      <td>0.003983</td>\n",
       "      <td>0.133123</td>\n",
       "      <td>0.017722</td>\n",
       "      <td>-0.039772</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2856</th>\n",
       "      <td>89</td>\n",
       "      <td>40</td>\n",
       "      <td>1.662</td>\n",
       "      <td>-0.000444</td>\n",
       "      <td>0.130906</td>\n",
       "      <td>0.017136</td>\n",
       "      <td>-0.045455</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2832 rows × 9 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      Subject_ID  Age     RR  ECG_mean   ECG_std   ECG_var  ECG_median  \\\n",
       "0              1   25  1.564 -0.005709  0.143250  0.020521   -0.044025   \n",
       "1              1   25  1.864  0.009104  0.148422  0.022029   -0.037736   \n",
       "2              1   25  1.852 -0.001956  0.150660  0.022698   -0.044025   \n",
       "3              1   25  1.756 -0.005924  0.156182  0.024393   -0.050315   \n",
       "4              1   25  2.496  0.021659  0.150437  0.022631   -0.031447   \n",
       "...          ...  ...    ...       ...       ...       ...         ...   \n",
       "2852          89   40  1.848  0.007995  0.136229  0.018558   -0.039757   \n",
       "2853          89   40  2.784  0.007042  0.135180  0.018274   -0.034091   \n",
       "2854          89   40  2.790  0.003459  0.128510  0.016515   -0.039772   \n",
       "2855          89   40  1.712  0.003983  0.133123  0.017722   -0.039772   \n",
       "2856          89   40  1.662 -0.000444  0.130906  0.017136   -0.045455   \n",
       "\n",
       "      female  male  \n",
       "0          0     1  \n",
       "1          0     1  \n",
       "2          0     1  \n",
       "3          0     1  \n",
       "4          0     1  \n",
       "...      ...   ...  \n",
       "2852       1     0  \n",
       "2853       1     0  \n",
       "2854       1     0  \n",
       "2855       1     0  \n",
       "2856       1     0  \n",
       "\n",
       "[2832 rows x 9 columns]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_ecg = df_ecg.dropna()\n",
    "df_ecg"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.2 Data modeling"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This is a classification task with a reduced number of samples (2832 rows), thus a linear SVM could be suitable."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The accuracy for the model was 0.5541176470588235.\n",
      "The f1 score for the model was 0.7395733561018879.\n",
      "The recall score for the model was 0.8240151515151516.\n",
      "The precision score for the model was 0.7449930871277175.\n",
      "The r-squared score for your model was 0.2064355142618164 on 850 values.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\PC\\Anaconda3\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1221: UndefinedMetricWarning: Recall is ill-defined and being set to 0.0 in labels with no true samples. Use `zero_division` parameter to control this behavior.\n",
      "  _warn_prf(average, modifier, msg_start, len(result))\n"
     ]
    }
   ],
   "source": [
    "# Model implementation\n",
    "\n",
    "X = df_ecg.drop('Subject_ID', axis=1)\n",
    "y = df_ecg['Subject_ID']\n",
    "\n",
    "X_train, X_test, y_train, y_test, svmlinear_model, y_preds = functions.svmlinear_model(X, y, test_size = .30, random_state = 42)\n",
    "model_accuracy, model_f1score, model_recall, model_precision, rsquared_score = functions.model_performace(y_test, y_preds)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The proposed model shows a low general performance. It could be due to the inadequacy of the model itself or could be due to the several issues that the features appear to introduce (bias, redundancy, inaccuracies, ...). Accordingly, the first step will be to include additional features, saved in Part 1: a portion of the raw (original) ECG signal. In this way, it can be assessed the impact of the features on the model's performance. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Adding features: ECG raw data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Upload the saved ECG samples, drop the rows with all NaN values and fill with zero the remaining NaNs \n",
    "df_ecg_samples = pd.read_pickle(\"df_ecg_samples\")\n",
    "df_ecg_samples = df_ecg_samples.dropna(how=\"all\")\n",
    "df_ecg_samples = df_ecg_samples.fillna(0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Subject_ID</th>\n",
       "      <th>Age</th>\n",
       "      <th>RR</th>\n",
       "      <th>ECG_mean</th>\n",
       "      <th>ECG_std</th>\n",
       "      <th>ECG_var</th>\n",
       "      <th>ECG_median</th>\n",
       "      <th>female</th>\n",
       "      <th>male</th>\n",
       "      <th>ecg_0</th>\n",
       "      <th>...</th>\n",
       "      <th>ecg_6851</th>\n",
       "      <th>ecg_6852</th>\n",
       "      <th>ecg_6853</th>\n",
       "      <th>ecg_6854</th>\n",
       "      <th>ecg_6855</th>\n",
       "      <th>ecg_6856</th>\n",
       "      <th>ecg_6857</th>\n",
       "      <th>ecg_6858</th>\n",
       "      <th>ecg_6859</th>\n",
       "      <th>ecg_6860</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>25</td>\n",
       "      <td>1.564</td>\n",
       "      <td>-0.005709</td>\n",
       "      <td>0.143250</td>\n",
       "      <td>0.020521</td>\n",
       "      <td>-0.044025</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.786164</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>25</td>\n",
       "      <td>1.864</td>\n",
       "      <td>0.009104</td>\n",
       "      <td>0.148422</td>\n",
       "      <td>0.022029</td>\n",
       "      <td>-0.037736</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.924530</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>25</td>\n",
       "      <td>1.852</td>\n",
       "      <td>-0.001956</td>\n",
       "      <td>0.150660</td>\n",
       "      <td>0.022698</td>\n",
       "      <td>-0.044025</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.823900</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>25</td>\n",
       "      <td>1.756</td>\n",
       "      <td>-0.005924</td>\n",
       "      <td>0.156182</td>\n",
       "      <td>0.024393</td>\n",
       "      <td>-0.050315</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>25</td>\n",
       "      <td>2.496</td>\n",
       "      <td>0.021659</td>\n",
       "      <td>0.150437</td>\n",
       "      <td>0.022631</td>\n",
       "      <td>-0.031447</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.622640</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2852</th>\n",
       "      <td>89</td>\n",
       "      <td>40</td>\n",
       "      <td>1.848</td>\n",
       "      <td>0.007995</td>\n",
       "      <td>0.136229</td>\n",
       "      <td>0.018558</td>\n",
       "      <td>-0.039757</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.568196</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2853</th>\n",
       "      <td>89</td>\n",
       "      <td>40</td>\n",
       "      <td>2.784</td>\n",
       "      <td>0.007042</td>\n",
       "      <td>0.135180</td>\n",
       "      <td>0.018274</td>\n",
       "      <td>-0.034091</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.568197</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2854</th>\n",
       "      <td>89</td>\n",
       "      <td>40</td>\n",
       "      <td>2.790</td>\n",
       "      <td>0.003459</td>\n",
       "      <td>0.128510</td>\n",
       "      <td>0.016515</td>\n",
       "      <td>-0.039772</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.539772</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2855</th>\n",
       "      <td>89</td>\n",
       "      <td>40</td>\n",
       "      <td>1.712</td>\n",
       "      <td>0.003983</td>\n",
       "      <td>0.133123</td>\n",
       "      <td>0.017722</td>\n",
       "      <td>-0.039772</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.602272</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2856</th>\n",
       "      <td>89</td>\n",
       "      <td>40</td>\n",
       "      <td>1.662</td>\n",
       "      <td>-0.000444</td>\n",
       "      <td>0.130906</td>\n",
       "      <td>0.017136</td>\n",
       "      <td>-0.045455</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.505682</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2832 rows × 6870 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      Subject_ID  Age     RR  ECG_mean   ECG_std   ECG_var  ECG_median  \\\n",
       "0              1   25  1.564 -0.005709  0.143250  0.020521   -0.044025   \n",
       "1              1   25  1.864  0.009104  0.148422  0.022029   -0.037736   \n",
       "2              1   25  1.852 -0.001956  0.150660  0.022698   -0.044025   \n",
       "3              1   25  1.756 -0.005924  0.156182  0.024393   -0.050315   \n",
       "4              1   25  2.496  0.021659  0.150437  0.022631   -0.031447   \n",
       "...          ...  ...    ...       ...       ...       ...         ...   \n",
       "2852          89   40  1.848  0.007995  0.136229  0.018558   -0.039757   \n",
       "2853          89   40  2.784  0.007042  0.135180  0.018274   -0.034091   \n",
       "2854          89   40  2.790  0.003459  0.128510  0.016515   -0.039772   \n",
       "2855          89   40  1.712  0.003983  0.133123  0.017722   -0.039772   \n",
       "2856          89   40  1.662 -0.000444  0.130906  0.017136   -0.045455   \n",
       "\n",
       "      female  male     ecg_0  ...  ecg_6851  ecg_6852  ecg_6853  ecg_6854  \\\n",
       "0          0     1  0.786164  ...       0.0       0.0       0.0       0.0   \n",
       "1          0     1  0.924530  ...       0.0       0.0       0.0       0.0   \n",
       "2          0     1  0.823900  ...       0.0       0.0       0.0       0.0   \n",
       "3          0     1  1.000000  ...       0.0       0.0       0.0       0.0   \n",
       "4          0     1  0.622640  ...       0.0       0.0       0.0       0.0   \n",
       "...      ...   ...       ...  ...       ...       ...       ...       ...   \n",
       "2852       1     0  0.568196  ...       0.0       0.0       0.0       0.0   \n",
       "2853       1     0  0.568197  ...       0.0       0.0       0.0       0.0   \n",
       "2854       1     0  0.539772  ...       0.0       0.0       0.0       0.0   \n",
       "2855       1     0  0.602272  ...       0.0       0.0       0.0       0.0   \n",
       "2856       1     0  0.505682  ...       0.0       0.0       0.0       0.0   \n",
       "\n",
       "      ecg_6855  ecg_6856  ecg_6857  ecg_6858  ecg_6859  ecg_6860  \n",
       "0          0.0       0.0       0.0       0.0       0.0       0.0  \n",
       "1          0.0       0.0       0.0       0.0       0.0       0.0  \n",
       "2          0.0       0.0       0.0       0.0       0.0       0.0  \n",
       "3          0.0       0.0       0.0       0.0       0.0       0.0  \n",
       "4          0.0       0.0       0.0       0.0       0.0       0.0  \n",
       "...        ...       ...       ...       ...       ...       ...  \n",
       "2852       0.0       0.0       0.0       0.0       0.0       0.0  \n",
       "2853       0.0       0.0       0.0       0.0       0.0       0.0  \n",
       "2854       0.0       0.0       0.0       0.0       0.0       0.0  \n",
       "2855       0.0       0.0       0.0       0.0       0.0       0.0  \n",
       "2856       0.0       0.0       0.0       0.0       0.0       0.0  \n",
       "\n",
       "[2832 rows x 6870 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Join both DataFrames\n",
    "df_ecg = df_ecg.join(df_ecg_samples, how='outer')\n",
    "df_ecg"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The accuracy for the model was 0.8764705882352941.\n",
      "The f1 score for the model was 0.8532361302606912.\n",
      "The recall score for the model was 0.8542781858355711.\n",
      "The precision score for the model was 0.870867160722166.\n",
      "The r-squared score for your model was 0.8198680107843652 on 850 values.\n"
     ]
    }
   ],
   "source": [
    "# Model implementation\n",
    "\n",
    "X = df_ecg.drop('Subject_ID', axis=1)\n",
    "y = df_ecg['Subject_ID']\n",
    "\n",
    "X_train, X_test, y_train, y_test, svmlinear_model, y_preds = functions.svmlinear_model(X, y, test_size = .30, random_state = 42)\n",
    "model_accuracy, model_f1score, model_recall, model_precision, rsquared_score = functions.model_performace(y_test, y_preds)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The performance of the model shows a meaningful improvement, proving the critical role features play in the implementation of a model as a classification strategy. The use of ECG raw data as DataFrame features could also indicate the particular information deliver by biological waveforms and their potential use as biometric prints, even without a complex feature engineering. \n",
    "Nevertheless, the amount of used features is high, thus processing time and computing resources are increased. Moreover, zero values could have a negative impact in the final performance of the model. Following, an implementation delivers insights on the  most suitable number of features to deliver a model with a high performance."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Model assessment"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First, the features with a high impact in the classification are checked. The weigths of model can lead to the understanding of which features are more important. In the case of the SVM linear model, there are weigths for the classification of each label against each label. So, checking 4 of them randomly, we obtained: "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature</th>\n",
       "      <th>coefs</th>\n",
       "      <th>abs_coefs</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Age</td>\n",
       "      <td>0.597977</td>\n",
       "      <td>0.597977</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>female</td>\n",
       "      <td>-0.298988</td>\n",
       "      <td>0.298988</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>male</td>\n",
       "      <td>0.298988</td>\n",
       "      <td>0.298988</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>ecg_13</td>\n",
       "      <td>0.050099</td>\n",
       "      <td>0.050099</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>ecg_14</td>\n",
       "      <td>0.049834</td>\n",
       "      <td>0.049834</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>ecg_12</td>\n",
       "      <td>0.049459</td>\n",
       "      <td>0.049459</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>ecg_11</td>\n",
       "      <td>0.048077</td>\n",
       "      <td>0.048077</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>ecg_15</td>\n",
       "      <td>0.048056</td>\n",
       "      <td>0.048056</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>ecg_10</td>\n",
       "      <td>0.045561</td>\n",
       "      <td>0.045561</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>ecg_16</td>\n",
       "      <td>0.045426</td>\n",
       "      <td>0.045426</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   feature     coefs  abs_coefs\n",
       "0      Age  0.597977   0.597977\n",
       "6   female -0.298988   0.298988\n",
       "7     male  0.298988   0.298988\n",
       "21  ecg_13  0.050099   0.050099\n",
       "22  ecg_14  0.049834   0.049834\n",
       "20  ecg_12  0.049459   0.049459\n",
       "19  ecg_11  0.048077   0.048077\n",
       "23  ecg_15  0.048056   0.048056\n",
       "18  ecg_10  0.045561   0.045561\n",
       "24  ecg_16  0.045426   0.045426"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Weights\n",
    "coef_df0 = functions.coef_weights(svmlinear_model.coef_[0], X_train)\n",
    "coef_df10 = functions.coef_weights(svmlinear_model.coef_[10], X_train)\n",
    "coef_df100 = functions.coef_weights(svmlinear_model.coef_[100], X_train)\n",
    "coef_df1000 = functions.coef_weights(svmlinear_model.coef_[100], X_train)\n",
    "\n",
    "# Top results\n",
    "coef_df0.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature</th>\n",
       "      <th>coefs</th>\n",
       "      <th>abs_coefs</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Age</td>\n",
       "      <td>0.414334</td>\n",
       "      <td>0.414334</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>male</td>\n",
       "      <td>0.138111</td>\n",
       "      <td>0.138111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>female</td>\n",
       "      <td>-0.138111</td>\n",
       "      <td>0.138111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>677</th>\n",
       "      <td>ecg_669</td>\n",
       "      <td>-0.029375</td>\n",
       "      <td>0.029375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>676</th>\n",
       "      <td>ecg_668</td>\n",
       "      <td>-0.027793</td>\n",
       "      <td>0.027793</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>111</th>\n",
       "      <td>ecg_103</td>\n",
       "      <td>0.026375</td>\n",
       "      <td>0.026375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>112</th>\n",
       "      <td>ecg_104</td>\n",
       "      <td>0.026338</td>\n",
       "      <td>0.026338</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>110</th>\n",
       "      <td>ecg_102</td>\n",
       "      <td>0.026318</td>\n",
       "      <td>0.026318</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>ecg_10</td>\n",
       "      <td>-0.026308</td>\n",
       "      <td>0.026308</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113</th>\n",
       "      <td>ecg_105</td>\n",
       "      <td>0.026281</td>\n",
       "      <td>0.026281</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     feature     coefs  abs_coefs\n",
       "0        Age  0.414334   0.414334\n",
       "7       male  0.138111   0.138111\n",
       "6     female -0.138111   0.138111\n",
       "677  ecg_669 -0.029375   0.029375\n",
       "676  ecg_668 -0.027793   0.027793\n",
       "111  ecg_103  0.026375   0.026375\n",
       "112  ecg_104  0.026338   0.026338\n",
       "110  ecg_102  0.026318   0.026318\n",
       "18    ecg_10 -0.026308   0.026308\n",
       "113  ecg_105  0.026281   0.026281"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "coef_df10.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature</th>\n",
       "      <th>coefs</th>\n",
       "      <th>abs_coefs</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Age</td>\n",
       "      <td>0.101749</td>\n",
       "      <td>0.101749</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>694</th>\n",
       "      <td>ecg_686</td>\n",
       "      <td>-0.051926</td>\n",
       "      <td>0.051926</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>693</th>\n",
       "      <td>ecg_685</td>\n",
       "      <td>-0.047951</td>\n",
       "      <td>0.047951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>238</th>\n",
       "      <td>ecg_230</td>\n",
       "      <td>-0.043214</td>\n",
       "      <td>0.043214</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>239</th>\n",
       "      <td>ecg_231</td>\n",
       "      <td>-0.041930</td>\n",
       "      <td>0.041930</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>237</th>\n",
       "      <td>ecg_229</td>\n",
       "      <td>-0.040588</td>\n",
       "      <td>0.040588</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>692</th>\n",
       "      <td>ecg_684</td>\n",
       "      <td>-0.039834</td>\n",
       "      <td>0.039834</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>240</th>\n",
       "      <td>ecg_232</td>\n",
       "      <td>-0.037106</td>\n",
       "      <td>0.037106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>236</th>\n",
       "      <td>ecg_228</td>\n",
       "      <td>-0.035947</td>\n",
       "      <td>0.035947</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>329</th>\n",
       "      <td>ecg_321</td>\n",
       "      <td>-0.032479</td>\n",
       "      <td>0.032479</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     feature     coefs  abs_coefs\n",
       "0        Age  0.101749   0.101749\n",
       "694  ecg_686 -0.051926   0.051926\n",
       "693  ecg_685 -0.047951   0.047951\n",
       "238  ecg_230 -0.043214   0.043214\n",
       "239  ecg_231 -0.041930   0.041930\n",
       "237  ecg_229 -0.040588   0.040588\n",
       "692  ecg_684 -0.039834   0.039834\n",
       "240  ecg_232 -0.037106   0.037106\n",
       "236  ecg_228 -0.035947   0.035947\n",
       "329  ecg_321 -0.032479   0.032479"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "coef_df100.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature</th>\n",
       "      <th>coefs</th>\n",
       "      <th>abs_coefs</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Age</td>\n",
       "      <td>0.101749</td>\n",
       "      <td>0.101749</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>694</th>\n",
       "      <td>ecg_686</td>\n",
       "      <td>-0.051926</td>\n",
       "      <td>0.051926</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>693</th>\n",
       "      <td>ecg_685</td>\n",
       "      <td>-0.047951</td>\n",
       "      <td>0.047951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>238</th>\n",
       "      <td>ecg_230</td>\n",
       "      <td>-0.043214</td>\n",
       "      <td>0.043214</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>239</th>\n",
       "      <td>ecg_231</td>\n",
       "      <td>-0.041930</td>\n",
       "      <td>0.041930</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>237</th>\n",
       "      <td>ecg_229</td>\n",
       "      <td>-0.040588</td>\n",
       "      <td>0.040588</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>692</th>\n",
       "      <td>ecg_684</td>\n",
       "      <td>-0.039834</td>\n",
       "      <td>0.039834</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>240</th>\n",
       "      <td>ecg_232</td>\n",
       "      <td>-0.037106</td>\n",
       "      <td>0.037106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>236</th>\n",
       "      <td>ecg_228</td>\n",
       "      <td>-0.035947</td>\n",
       "      <td>0.035947</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>329</th>\n",
       "      <td>ecg_321</td>\n",
       "      <td>-0.032479</td>\n",
       "      <td>0.032479</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     feature     coefs  abs_coefs\n",
       "0        Age  0.101749   0.101749\n",
       "694  ecg_686 -0.051926   0.051926\n",
       "693  ecg_685 -0.047951   0.047951\n",
       "238  ecg_230 -0.043214   0.043214\n",
       "239  ecg_231 -0.041930   0.041930\n",
       "237  ecg_229 -0.040588   0.040588\n",
       "692  ecg_684 -0.039834   0.039834\n",
       "240  ecg_232 -0.037106   0.037106\n",
       "236  ecg_228 -0.035947   0.035947\n",
       "329  ecg_321 -0.032479   0.032479"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "coef_df1000.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Feature')"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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qV63m5ub9eijj/okEAAAGDx/1dUHx48fr08//XSgswAAgEHWrxWB9PT0ns/vd7vdunDhgv7hH/7Bp8EAAIDv9asI/Pllgf38/BQcHKzp06f7LBQAABgc/Xpp4Pjx47rjjjt0xx136Pbbb9f06dP1+OOP+zobAADwMa8rAj/72c/0ySef6N1339UHH3zQs727u1uXLvE+fAAAhjuvReAHP/iBPv30U23ZskUZGRk920eNGqVp06b5PBwAAPAtr0Xg5ptv1s0336xf//rXam5uVnt7u9xut65cuaL/+7//0/z58wcrJwAA8IF+nSz4zDPPqLi4WN3d3ZowYYIuXryoWbNmyel0+jofAADwoX6dLPjyyy/r1KlTio+Pl8Ph0C9/+UsFBwf7OhsAAPCxfhWBG264QVarVTNmzFBVVZXuuusu1dXV+TobAADwsX69NGC1WnXo0CHddttteumll3TDDTeoo6PD19kAAICP9asIbNmyRa+88ooSExN18uRJbdq0SRs3bvR1Np9ZnnnY6Ai9vPDEIqMjAABMql9FYNKkSUpNTVVVVZUee+wxdXR0aPz48b7OBgAAfKxf5wi8/fbbWrlypX74wx/qiy++0KJFi3T69GlfZwMAAD7WryLw85//XPv27dPf/d3fKSwsTC+99JK2bdvm62wAAMDH+lUEXC6XwsLCem4bfcGh4uJi7dix46rtOTk519wOAACurV9F4MYbb9TJkyfl5+enr776Sr/85S910003+TrbVTo6OpSVlaV9+/Zddd/+/ftVXV096JkAABjOvJ4s+Pnnn2vSpEnKz8/Xli1bVFdXpyVLlug73/mO8vPzve64q6tLubm5qq2tlcvl0saNG9XW1qaioiJJUnR0tPLy8nTq1Cnt2rVLVqtVQUFBioqK6nXZ4z/X2dmpxMRELViwQDU1NT3bz507p4qKCq1atarXdgAA4J3XIrB+/Xq9/PLLCgkJ0axZs/Tzn/+83zt2Op0KDg5WYWGhmpqaZLfb1d7eLqfTqZCQEBUVFamurk4FBQUqLS1VaGioMjMzve4zKChIsbGxKisr69l28eJFFRUVqaioSK+++mq/8w0lYWE2oyP0MtTyDCXMxjNm4x3z8YzZeDYYs/FaBNxud8/XR44c0fe///1+77i6ulrl5eWqrKyU9PWliyUpJCREkpSRkaH6+npZrVaFhoZK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AAAAJkYRAADAxCgCAACYGEUAAAATowgA6Jd/+qd/0okTJ3pub926VXPmzNHly5d7tsXGxurChQvXfPzKlSu97v+TTz7Rk08+KUk6c+aM0tPTByA1gL5QBAD0y7x581ReXt5z+7e//a2+9a1v9Wyrra3V+PHjdfPNN1/z8YcPH/a6/88++0yffPLJwAUG0C8UAQD9Mn/+fJ07d06S9Pnnn8tisWjZsmU6ffq0pK8/9WzhwoU6dOiQvve972nlypV68skney6bGhUVJUm6dOmSfvCDHyghIUHr169XYmKiLly4oIKCAr377rvKy8uTJDU2Nmrt2rVatmyZ1q9f32vlAcDAoQgA6JfbbrtNH3/8sTo7O3X69GktXLhQCxcu7FUEbrjhBh04cED79+/X4cOHFRISoueff77Xfp599llFRETolVde0Y9+9CNVV1dLkrKzszVr1izl5uZK+nqFYNOmTXr11VfV0NCg3/72t4N7wIBJcJUZAP0yatQo/f3f/73eeecdnT59Wg888ICmTJmijo4Offnllzp37py+8Y1vqLa2VikpKZKkrq4uRUdH99rPW2+9pR07dkiSZs+e7fE6F7feequmTJki6etrgzQ1Nfnw6ADzoggA6Ld58+bpf/7nf1RZWant27dL+volg9dff13BwcFyu9265557ej4PvbW1VVeuXOm1j1GjRqk/n2z+51c19PPz69djAFw/XhoA0G/z58/X4cOHNXPmzJ5f1AsXLtSLL76ohQsX6jvf+Y7+67/+S1988YXcbnfPNeb/ch9HjhyRJP3+97/XBx98ID8/v6uuUQ9gcFAEAPTbzJkz1dzcrNjY2J5t8+bNU01NjRYsWKBbb71VGRkZevDBB5WQkCCXy6VHHnmk1z5+9KMf6eOPP9by5cu1a9cuhYaGKiAgQNOmTdOlS5f005/+dLAPCzA1rj4IYFAdPnxYN998s+bOnavPPvtMdrtdJ06ckL8/f5cARuAcAQCDKjIyUrm5uXK5XPL391d+fj4lADAQKwIAAJgYNRwAABOjCAAAYGIUAQAATIwiAACAiVEEAAAwMYoAAAAm9v/ep77Abm+tWgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 576x396 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.style.use(\"seaborn\")\n",
    "\n",
    "pd.Series(abs(svmlinear_model.coef_[0]), index=X_train.columns).nlargest(10).plot(kind='barh');\n",
    "plt.xlabel(\"Weigth\")\n",
    "plt.ylabel(\"Feature\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Feature')"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x396 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pd.Series(abs(svmlinear_model.coef_[10]), index=X_train.columns).nlargest(10).plot(kind='barh');\n",
    "plt.xlabel(\"Weigth\")\n",
    "plt.ylabel(\"Feature\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Feature')"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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3bp13pqmiIjIgOS1gFBRUUF4eDglJSU0NjZis9lobW2loqKCyMhIysvLcTgcFBcXs2XLFqKiosjNze1yzMbGRk6ePMmGDRvYtm0bpaWllJWVMXLkSNLS0hgyZAi33347F198Mb///e+JiIjg1ltvVUCQfi062nLOP8Uz1E/PUS89q6/002sBoba2lqqqqs7rBNrb2wGIjIwEICcnh/r6esxmM1FRUQAkJiZy/PjxC445dOhQxo07+53w2267jXXr1lFTU8Nbb73F3r17CQkJYcGCBbz22mu8/PLLmEwm/vznP/PJJ5+wcOFCnnrqKaKjo701ZRGvqK8/RXS0hfr6U74uZcBQPz1HvfSs3u5nV2HEaxcpWq1WUlNTsdvtrF+/nuTkZACampoAKC4uxuFw0NzcTENDAwDV1dVdjjl69GgqKysBeP/99xkxYgQWi4Xg4GCCgoLw9/cnIiKCkydP8vzzz7Np0ybsdjtXX301paWlCgciIiLd5LUVhIyMDPLz87HZbDidTjIzMykoKCA7Oxs/Pz/i4+NJSEhg8eLFzJo1C4vFgsvlYvjw4RccMzs7m/z8fNLT0wkICKC0tJSYmBjS09PJzMzkoosuYtiwYUydOtVb0xIRERkUTG632+3LAtauXcvMmTMJDAxk/vz5JCUlMWXKFJ/UolstS1+0MW+clnE9TP30HPXSs/rSKQaff80xNDSU6dOnExwcTExMDCkpKWRlZRneFxsbS1FRkQ8qFBERGXx8HhBsNhs2m+2cbXa73UfViIiICPSzOymKiIhI7/D5CkJfsvOJyTqX5iE6Lyki0r9pBUFEREQMFBBERETEQAFBREREDBQQRERExEABQURERAwUEERERMRAAUFEREQMFBBERETEQAFBREREDBQQRERExEABQURERAwUEERERMRAAUFEREQMFBBERETEQI97/oZJudt9XYJIlzbmjfN1CSIySGgFQURERAwUEERERMRAAUFEREQM+tU1CEePHmXRokV0dHTgdrspKirCarWya9cunnvuOfz9/Rk1ahRLly6lvb2dX/7yl3z55ZeYzWaWLFnC97//fV9PQUREpF/oVwFhxYoV2Gw2JkyYwDvvvMPy5cv59a9/zZNPPsnOnTsZMmQIv/jFL9i3bx8Oh4OQkBC2bt3KoUOH+NWvfsWGDRt8PQUREZF+odsBoaqqitra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EQMFBBERETFQQBAREREDBQQRERExUEAQERERAwUEERERMVBAEBEREQMFBBERETFQQBAREREDBQQREREx0OOev2FS7nZflyAiInJeG/PG9erv0wqCiIiIGCggiIiIiIECgoiIiBgoIIiIiIhBvwwI69atIykpidOnT/u6FBERkQGpXwaEnTt3kpKSwquvvurrUkRERAakfvc1x/fee49hw4aRkZHBggULuPvuuzl48CCFhYWEhoYSGRlJUFAQjz32GHa7nV27dmEymUhJSWHGjBm+Ll9ERKRf6HcBoaKigmnTpmG1WgkMDKS6upqlS5dSVlbGyJEj+c1vfsOxY8f49NNP2b17Ny+88AImk4n777+fpKQkrFarr6cgIiLyrUVHW3r19/WrgPD3v/+dt99+m4aGBux2O06nk02bNvHVV18xcuRIAEaPHs3u3bupra3l6NGj3H///Z37fvHFFwoIIiLSL9XXn/L4mF2Fjn4VEHbs2EFaWhoLFy4EoLW1lfHjxxMcHMynn37KiBEjqK6uBsBqtTJixAieeeYZTCYTzz77LKNGjfJl+SIiIv1GvwoIFRUVlJWVdb4eMmQId9xxB1FRUSxatIiQkBAuuugiLr30Uq666ipuvvlmfvKTn3DmzBmuu+46Lr30Uh9WLyIi0n+Y3G6329dFfFfPP/88EydOJCIigt/85jdcdNFF5OTkfOtx9CwGERHpq7zxLIYBc4rhQiIjI3nggQcICQnBYrHw2GOP+bokERGRfm1ABIQ777yTO++809dliIiIDBgD4hSDJ3njKtHBKDraol56kPrpWeqn56iXntXb/ezqFEO/vJOiiIiIeJcCgoiIiBgoIIiIiIiBAoKIiIgYKCCIiIiIgQKCiIiIGCggiIiIiIHugyAiIiIGWkEQERERAwUEERERMVBAEBEREQMFBBERETFQQBAREREDBQQRERExGBQBweVysWTJEtLT08nKyqKuru6cn//xj38kLS2N9PR0tm7d2q19BrOe9LOtrY0FCxaQmZnJPffcw969e31Rep/Uk37+w4kTJxg7diyfffZZb5bcZ/W0l2vXriU9PZ27776bioqK3i67z+rp3/Xc3FwyMjLIzMzUf5v/T3eOKa2trWRkZHT2zOfHIfcgsGfPHvfChQvdbrfb/eGHH7pnz57d+bMzZ864J0yY4G5qanKfPn3afffd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\n",
      "text/plain": [
       "<Figure size 576x396 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pd.Series(abs(svmlinear_model.coef_[100]), index=X_train.columns).nlargest(10).plot(kind='barh');\n",
    "plt.xlabel(\"Weigth\")\n",
    "plt.ylabel(\"Feature\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Feature')"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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k7RhwwZvzwYAALyszzMCP/7xj/XZZ5/po48+0scff9y9vaurS+fP8zl8AAACXZ9F4KGHHtLnn3+up59+WpmZmd3bhw0bpokTJ3p9OAAA4F19FoHrr79e119/vX71q1+publZbW1tcrvdunTpkv74xz9q1qxZQzUnAADwAo8uFnz++edVVlamrq4ujRo1SmfOnNEtt9wih8Ph7fkAAIAXeXSx4BtvvKEjR44oOTlZ5eXl+td//VdFRER4ezYAAOBlHhWBMWPGyGq1avLkyaqpqdG3v/1t1dfXe3s2AADgZR69NWC1WrV3717dfPPNeuWVVzRmzBi1t7d7ezYAAOBlHhWBp59+Wm+++aaWLFmid999V5s2bdL69eu9PZvXLMza5+sRerVj41xfjwAAMBGPisDYsWOVlpammpoaPf7442pvb1doaKi3ZwMAAF7m0TUC//mf/6nFixfr4Ycf1tmzZzV37lwdPXrU27MBAAAv86gI/PM//7N27typa6+9VtHR0XrllVdUXFzs7dkAAICXeVQEXC6XoqOjux/354ZDly5d0qpVq/TAAw/oq6++6v+EvZgzZ86grQUAgFl5dI3AuHHj9O677yooKEjnzp3Tq6++quuuu86jHTidTjU1NamiouJvGhQAAAy+PovAl19+qbFjx6qgoEBPP/206uvrdc899+jOO+9UQUGBRzvIzc3V//3f/+mf/umf1NraqqamJklSTk6O4uPjdc899+jWW29VXV2dZs6cqfPnz6u6ulqxsbF67rnnVFtbq2effVYul0vnzp1TTk6Obrvttu71//SnP6mwsFCSNGrUKBUVFclmsw30fw8AAEwlyO12u3t78v7779cbb7whSdqxY4cefPDBfu/g1KlT+tGPfqTbb79dMTExSk9P7y4Gu3btUkJCgg4dOqTo6Gjdcccdcjgcmjhxou6++27t3btXR48e1cSJExUfH6/9+/fr2LFjKiws1Jw5c/T+++8rNTVVRUVFmjRpkhwOh06dOqVHH320z5n8+eOD+7cu9vUIAAAT6fOMwF92hP379w+oCPxZbW2tfve73+ntt9+WJJ07d07S1/+K//PbDKGhod3XH9hsNnV0dGjMmDHatm2bQkJC1NraKqvV2mPdTz75RPn5+ZKkzs5OxcbGDnhGf+B0Ds7tnaOjbYO2lr8iozGQ0RiMntEI+aKjr3y2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\n",
      "text/plain": [
       "<Figure size 576x396 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pd.Series(abs(svmlinear_model.coef_[1000]), index=X_train.columns).nlargest(10).plot(kind='barh');\n",
    "plt.xlabel(\"Weigth\")\n",
    "plt.ylabel(\"Feature\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Even if age seems to have a great impact in all the classification pairs, and gender in some of them, the rest of the features are not consistent. Combining this information with the previous model performance that only used demographic features and other selected features, demographic information alone can not achieve this performance and thus the waveform has a substantial role in the performance of this model, achieving a way higher accuracy and performance in general. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAe8AAAFlCAYAAADComBzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeXwTdf4/8Nckk7PpCQU5uxYFFXQRFQVELhEVEBSwCIK6rge7uPv1BLlELAiCuoAu6q7489hdioAoroqC+EBBWWUtCApsPZCblt5JM8nMfH5/pAm9SUvTXK/n4+GjSSaZ+XzSyms+M595jySEECAiIqKoYQh3A4iIiKhxGN5ERERRhuFNREQUZRjeREREUYbhTUREFGUY3kRERFGG4U1Rr1u3bhg5ciRGjRqF0aNHY9iwYRgzZgy+++67cDctaCNGjMCOHTtqvT5p0iR89NFHTV7v9OnTcf3118PlclV7/dJLL8Xhw4ebvN6q1q1bh/vuu69Z1hXs9gYOHIi777671rKqfwv+/2bOnNnkbe3evRtz5sw5m+YShYQc7gYQNYfXX38daWlpgeevvvoqsrOzkZOTE8ZWRYYjR45g/vz5mD9/frib0izWr1+PBx98EKNGjapzec2/hbORl5eHEydONMu6iJoTw5tijqqqOHbsGJKTkwEAP/74I2bOnAmPxwMhBMaOHYuJEyeirKwMs2bNwr59+9CmTRu0a9cOnTp1wgMPPIDBgwdj6dKluPjiiwGg2vOXXnoJmzdvhtvtRkVFBaZNm4ahQ4di+fLlyM3NxcmTJ9GtWzcsWbIEK1aswMcffwxd19GhQwc88cQTaNu2LfLy8jBjxgxUVFQgMzOz1si4qk8++QSvvPIK3G43Ro4ciSlTpmDFihXIy8vDs88+CwD45ptvkJ2djfXr19f6/OTJk/Huu+9i48aNGDZsWLVlhw8fxsiRI/Htt9/Wer5u3bpA248ePYq2bdvi1ltvxVtvvYVffvkFd911F373u98BAPLz83H33Xfj5MmT6NChA5566imkp6ejrKwM8+fPx4EDB+D1etGnTx889thjkGUZPXr0wJAhQ7Bv3z4sWbIk8F0DQFlZGZ588kns27cPkiShf//+eOihh/DMM8/gu+++w+HDh1FUVIQ777wz6L+LH3/8EfPnz0dxcTE0TcOkSZMwduxY6LqOBQsWYNeuXXA6nRBCIDs7G+3bt8eyZctQVlaGxx9/HKNHj8ZTTz2F999/HwCwY8eOwPPG/O4//vhjrFixApIkwWg04rHHHsMVV1wRdD+IAIY3xYg77rgDAFBUVASLxYJBgwbh6aefBuAbhQ8ePBj33nsv8vPzsWDBAtx2221YunQpLBYLPvroI5w6dQq33HILOnXq1OB2jhw5gu3bt+PNN9+E1WrFv//9byxbtgxDhw4NLH///fchyzLWr1+PAwcO4O2334Ysy8jJycGsWbPwt7/9DY888ggmTpyIcePGYefOnZg4cWK923Q6nVi9ejXcbjfGjRuHiy66CLfeeiuuu+46FBcXIyUlBatXr8b48ePr/HxaWhoWLlyIhx9+GJdccgnatWsX9Pf6zTffYMOGDWjbti1GjhyJf//733j99ddx4MAB3HrrrYHw/Pnnn/H8888jIyMDzz33HObPn4+//OUvWLBgAbp3746FCxdC0zRMnz4dr732Gu655x54vV4MGjQIS5curbXd7OxspKSkYMOGDfB6vZgyZQpWrlyJGTNm4IcffsDEiRNx/fXX19nmO+64AwbD6TOCK1euRHJyMv70pz/hmWeeQffu3VFWVoasrCycd955EELg5MmTyMnJgcFgwCuvvIK//e1veOmll/CnP/0JGzduxNNPP13naY2qgv3dP/PMM1iyZAl69uyJL774Ajt27GB4U6MxvCkm+A+V7t27F/feey+uvPJKtGrVCgAwdOhQTJs2Dbt370afPn0wa9YsGAwGfPXVV5g5cyYkSULr1q1rjUrr0qFDBzzzzDPYsGEDDh48GBit+fXs2ROy7PvfasuWLfjuu+8wZswYAICu66ioqEBRURH279+P0aNHAwAuu+wynH/++fVuc+zYsZBlGQ6HA8OGDcP27dsxYMAADBw4EO+++y5Gjx6NL774Ak888US967j66qtx880349FHH8Ubb7xx5i+00sUXXxwI+44dO+Lqq6+GwWBAp06doCgKKioqAAB9+/ZFRkZGoL1jx44FAHz22Wf47rvvsGbNGgCA2+2utv7LL7+8zu1u3boV//rXvyBJEsxmM8aPH4/XX38d99577xnbXNdh87y8PPz666+YMWNG4DW3243vv/8eEyZMQHJyMlatWoVDhw5hx44dSEhICObrqSaY3z0ADB8+HFOn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ADh58iRatWqFTZs2wWq11lqHqKNKshACmqYF2bvTdF1Hx44d8e677wIANE1DQUEBAGDChAm48sorceWVV6JPnz545JFHan1ekiTouh54XvU7qdr2+vp44YUXYtCgQdiyZQsWL16M3bt3V9uRIIoFnG1O1IKmT5+OL774AidPngQApKam4tChQ1AUBcXFxdi5c2ej17lhwwYAwCeffIIuXbrAbrfjqquuwj//+U8AQF5eHkaOHImKiop61+FwONCxY0d8/PHHAHx34isoKMD555/f6PZkZmaipKQE33zzDQDfLUAfeeQRFBcX45dffsGf//xnXHPNNdi8eXNg58BoNEJVVQC+7yQvLw+A79x5fn5+ndupr4/jxo2D0+nEnXfeiTvvvBPff/99o/tAFOk48iZqQf7D5/5Lqs4//3wMGDAAw4cPR4cOHXDZZZc1ep2//PILRo0ahYSEhMAh7FmzZmHOnDkYOXIkAN/dns40033x4sWYO3culi9fDpPJhOXLl9ca/QfDbDZj6dKlmD9/PhRFgcPhwKJFi5CSkoKxY8di+PDhkGUZV111FdxuN1wuF6644gpMmzYNrVu3xoj/394d2jAUw1AUNQjKKtkk+tMEZYAsle3KCioVlPVJ52xgdCUb+Hnq3ltzzhpjvE8Hn77NuNaqvXe11qr3Xuecn2eAf+erGACEsTYHgDDiDQBhxBsAwog3AIQRbwAII94AEEa8ASCMeANAmBeW7pRFtXmTBAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 576x396 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The best_cutoff for the model was 250.\n"
     ]
    }
   ],
   "source": [
    "# Cutoffs here pertains to the number of missing values allowed in the used columns.\n",
    "\n",
    "cutoffs = [1000, 500, 250, 100, 25, 10, 5, 2]\n",
    "\n",
    "r2_scores_test, r2_scores_train, svmlinear, X_train, X_test, y_train, y_test, best_cutoff = functions.find_optimal_model(X, y, cutoffs)\n",
    "print(\"The best_cutoff for the model was {}.\".format(best_cutoff))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x396 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The best_cutoff for the model was 300.\n"
     ]
    }
   ],
   "source": [
    "# Cutoffs here pertains to the number of feature columns allowed by the model.\n",
    "\n",
    "cutoffs = [2000, 1000, 500, 400, 300, 200, 100, 25, 10, 5]\n",
    "\n",
    "r2_scores_test, r2_scores_train, svmlinear, X_train, X_test, y_train, y_test, best_cutoff = functions.find_optimal_model(X, y, cutoffs, cutoff_features=True)\n",
    "print(\"The best_cutoff for the model was {}.\".format(best_cutoff))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.3 Conclusions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The raw ECG waveform used as features for the selected linear SVM classification model delivers better accuracy than demographic information of the subjects and point-based features extracted from the ECG waveform. Consequently, results show that the raw ECG waveform could be used as a biometric human identification measure for this specific database.\n",
    "It remains the importance of a generalization of this method to a broader sample population to confirm this possibility. Additionally, the impact of aging in the ECG waveform, and thus, in the capacity of the model to detect these changes through time to identify correctly the subject, or the impact of disease affecting the ECG and the biometric identification. "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
